package main

import (
	"fmt"
	"log"

	_ "github.com/gogf/gf/contrib/drivers/sqlite/v2"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/gogf/gf/v2/os/gtime"

	"goldtree/internal/entity"
	"goldtree/utility/crypto"
)

func main() {
	ctx := gctx.GetInitCtx()

	fmt.Println("正在重置默认管理员账户...")

	// 确保数据目录存在
	if err := g.Cfg().SetPath("../manifest/config"); err != nil {
		log.Fatal("配置文件路径设置失败:", err)
	}

	// 初始化数据库
	db := g.DB()

	// 删除现有的管理员账户
	fmt.Println("删除现有管理员账户...")
	_, err := db.Model("users").Ctx(ctx).Where("username", "admin").Delete()
	if err != nil {
		log.Printf("删除现有管理员账户失败: %v", err)
	}

	// 删除相关令牌
	_, err = db.Model("user_tokens").Ctx(ctx).Where("user_id IN (SELECT id FROM users WHERE username = ?)", "admin").Delete()
	if err != nil {
		log.Printf("删除管理员令牌失败: %v", err)
	}

	// 使用正确的加密方式创建新的管理员账户
	password := "admin123"
	hashedPassword, err := crypto.GeneratePasswordHash(password)
	if err != nil {
		log.Fatal("密码加密失败:", err)
	}

	fmt.Printf("加密后的密码: %s\n", hashedPassword)

	admin := &entity.User{
		Username:  "admin",
		Password:  hashedPassword,
		Email:     "admin@goldtree.com",
		Nickname:  "系统管理员",
		Role:      "admin",
		Status:    "active",
		CreatedAt: gtime.Now(),
		UpdatedAt: gtime.Now(),
	}

	result, err := db.Model("users").Ctx(ctx).Data(admin).Insert()
	if err != nil {
		log.Fatal("创建管理员账户失败:", err)
	}

	adminId, _ := result.LastInsertId()
	fmt.Printf("管理员账户创建成功，ID: %d\n", adminId)

	// 验证密码是否正确
	if crypto.VerifyPassword(password, hashedPassword) {
		fmt.Println("✓ 密码验证成功")
	} else {
		fmt.Println("✗ 密码验证失败")
	}

	fmt.Println("默认管理员账户重置完成!")
	fmt.Println("用户名: admin")
	fmt.Println("密码: admin123")
}
